package com.fy.util;

import java.io.File;
import java.util.UUID;

/**
 * 文件操作工具类
 * @author 小叶
 * @version 1.0
 */
public class FileUtil {
	/**
	 * 根据路径，创建整个目录
	 * @param path
	 */
	public static void mkdirs(String path) {
		try {
			File dirFile = new File(path); // 根据路径，创建目录
			boolean isDir = dirFile.exists(); // 判断目录是否存在
			if (isDir == true)
				System.out.println("目录" + path + "已存在，继续进程");
			else {
				System.out.println("目录" + path + "不存在，正在创建");
				/*
				 * JDK中提供了创建目录的两种方法实现mkdir()和mkdirs()
				 * 前者是在给定path目录下创建指定的目录，若此外还有不存在的目录则会抛出异常(FileNotFoundException)
				 * 后者则是相对安全的实现，因为它会自动创建整个path目录下所有不存在的目录
				 */
				isDir = dirFile.mkdirs(); // 若不存在，则创建整个目录
				if (isDir == true)
					System.out.println("创建成功");
				else {
					System.out.println("创建失败，请检查磁盘是否已满");
					System.exit(1); // 退出系统
				}
			}
		} catch (Exception e) {
			System.err.println("目录创建时发生异常");
			e.printStackTrace();
		}
	}
	/**
	 * 为防止一个目录下面出现同名文件，文件名=UUID+"_"+原始名称
	 * @param filename 文件的原始名称
	 * @return String 新的文件名
	 */
	public static String makeFileName(String filename) {
		return UUID.randomUUID().toString() + "_" + filename;
	}
	/**
	 * 为防止一个目录下面出现太多文件，要使用hash算法打散存储
	 * @param filename 文件名
	 * @param savePath 文件存储路径
	 * @return String 新的存储路径
	 */
	public static String makePath(String filename, String savePath) {
		// 得到文件名的hashCode的值，得到的就是filename这个字符串对象在内存中的地址
		int hashcode = filename.hashCode();
		int dir1 = hashcode & 0xf; // 0-15
		String dir = savePath + "\\" + dir1;// 构造新的保存目录
		mkdirs(dir);
		return dir;
	}
}